home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / sh / include / asm / bitops-irq.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.7 KB  |  92 lines

  1. #ifndef __ASM_SH_BITOPS_IRQ_H
  2. #define __ASM_SH_BITOPS_IRQ_H
  3.  
  4. static inline void set_bit(int nr, volatile void *addr)
  5. {
  6.     int    mask;
  7.     volatile unsigned int *a = addr;
  8.     unsigned long flags;
  9.  
  10.     a += nr >> 5;
  11.     mask = 1 << (nr & 0x1f);
  12.     local_irq_save(flags);
  13.     *a |= mask;
  14.     local_irq_restore(flags);
  15. }
  16.  
  17. static inline void clear_bit(int nr, volatile void *addr)
  18. {
  19.     int    mask;
  20.     volatile unsigned int *a = addr;
  21.     unsigned long flags;
  22.  
  23.     a += nr >> 5;
  24.     mask = 1 << (nr & 0x1f);
  25.     local_irq_save(flags);
  26.     *a &= ~mask;
  27.     local_irq_restore(flags);
  28. }
  29.  
  30. static inline void change_bit(int nr, volatile void *addr)
  31. {
  32.     int    mask;
  33.     volatile unsigned int *a = addr;
  34.     unsigned long flags;
  35.  
  36.     a += nr >> 5;
  37.     mask = 1 << (nr & 0x1f);
  38.     local_irq_save(flags);
  39.     *a ^= mask;
  40.     local_irq_restore(flags);
  41. }
  42.  
  43. static inline int test_and_set_bit(int nr, volatile void *addr)
  44. {
  45.     int    mask, retval;
  46.     volatile unsigned int *a = addr;
  47.     unsigned long flags;
  48.  
  49.     a += nr >> 5;
  50.     mask = 1 << (nr & 0x1f);
  51.     local_irq_save(flags);
  52.     retval = (mask & *a) != 0;
  53.     *a |= mask;
  54.     local_irq_restore(flags);
  55.  
  56.     return retval;
  57. }
  58.  
  59. static inline int test_and_clear_bit(int nr, volatile void *addr)
  60. {
  61.     int    mask, retval;
  62.     volatile unsigned int *a = addr;
  63.     unsigned long flags;
  64.  
  65.     a += nr >> 5;
  66.     mask = 1 << (nr & 0x1f);
  67.     local_irq_save(flags);
  68.     retval = (mask & *a) != 0;
  69.     *a &= ~mask;
  70.     local_irq_restore(flags);
  71.  
  72.     return retval;
  73. }
  74.  
  75. static inline int test_and_change_bit(int nr, volatile void *addr)
  76. {
  77.     int    mask, retval;
  78.     volatile unsigned int *a = addr;
  79.     unsigned long flags;
  80.  
  81.     a += nr >> 5;
  82.     mask = 1 << (nr & 0x1f);
  83.     local_irq_save(flags);
  84.     retval = (mask & *a) != 0;
  85.     *a ^= mask;
  86.     local_irq_restore(flags);
  87.  
  88.     return retval;
  89. }
  90.  
  91. #endif /* __ASM_SH_BITOPS_IRQ_H */
  92.